package com.cjkj.system.service;

import com.cjkj.common.core.web.domain.AjaxResult;
import com.cjkj.system.domain.dto.DiagnosisReq;
import com.cjkj.system.domain.dto.PatVisitReq;
import com.cjkj.system.domain.dto.PatientEditInfoReq;
import com.cjkj.system.domain.dto.VisitRecordReq;
import com.cjkj.system.domain.vo.*;

import java.util.List;

/**
 * 患者就诊记录Service接口
 * 
 * @author cjkj
 * @date 2024-08-30
 */
public interface ITPatVisitService 
{

    /**
     * 查询患者就诊记录列表
     *
     * @param req 查询条件
     * @return 患者就诊记录集合
     */
    List<PatVisitListVo> getTPatVisitList(PatVisitReq req);
    List<PatVisitSimpleVo> getVisitList(PatVisitReq req);
    List<PatVisitListVo> getAllList(PatVisitReq req);

    /**
     * 新增患者就诊记录
     *
     * @param req 患者就诊信息
     * @return 结果
     */
    int add(PatientEditInfoReq req);

    /**
     * 获取患者信息
     * 用于修改时数据回显
     * @param visitNo 就诊号
     * @return
     */
    PatientEditInfoReq getInfo(Long visitNo);
    /**
     * 获取患者信息
     * 用于查看监测报告回显数据
     * @param visitNo 就诊号
     * @return
     */
    PatientDetailInfoVo getDetailInfo(Long visitNo);

    /**
     * 修改患者就诊记录
     *
     * @param req 患者就诊信息
     * @return 结果
     */
    int update(PatientEditInfoReq req);

    /**
     * 患者出院
     * @param visitNo
     * @return
     */
    void leaveHospital(Long visitNo);

    /**
     * 批量出院
     * @param visitNos 就诊号，多个以英文逗号隔开
     */
    void batchLeaveHospital(String visitNos);

    /**
     * 删除患者就诊记录信息
     *
     * @param visitNo 患者就诊记录主键
     * @return 结果
     */
    int deleteTPatVisitByVisitNo(Long visitNo);

    AlarmVo getUsage();

    /**
     * 患者诊断
     * @param req
     * @return
     */
    int doDiagnosis(DiagnosisReq req);

    /**
     * 同一患者的就诊历史记录
     * @param req
     * @return
     */
    List<PatVisitHistoryVo> getVisitRecords(VisitRecordReq req);

    /**
     * 大屏查看患者列表
     **/
    List<ScreenPatientInfo> listScreenPatient(String hospitalId, String deptId, String keyWord, String dataType);

    /**
     * 对就诊中的患者一键续绑
     * @param visitNo 就诊号
     */
    AjaxResult continueBind(Long visitNo);
}
